import $api from './$u.api.js'
import $login from './$u.login.js'
import $message from './$u.message.js'

export default {
	install: (Vue, vm) => {

		vm.$u.api = $api.make(vm);
		vm.$u.login = $login.make(vm);
		vm.$u.message = $message.make(vm);

		// 常用跳转封装
		vm.$u.page = {
			go(url, data) {
				vm.$u.route({
					url: url,
					params: data || {}
				});
			},
			rec(url, data) {
				vm.$u.route({
					url: url,
					type: 'redirect',
					params: data || {}
				});
			},
			tab(url, data) {
				vm.$u.route({
					url: url,
					type: 'tab',
					params: data || {}
				});
			}
		}

		// 通用缓存插件
		vm.$u.cache = {
			/* 写入缓存数据 */
			set(name, value) {
				uni.setStorageSync(name, JSON.stringify({
					value: value
				}));
			},
			/* 获取缓存数据 */
			get(name, _default) {
				try {
					return JSON.parse(uni.getStorageSync(name)).value;
				} catch (e) {
					return _default;
				}
			},
			/* 删除缓存数据 */
			del(name) {
				uni.removeStorageSync(name)
			}
		}

		// 请求配置，配置基础参数
		vm.$u.http.setConfig({
			showLoading: false,
			loadingMask: false,
			baseUrl: $api.BASE_URL
		});

		// 请求拦截，配置Token等参数
		vm.$u.http.interceptor.request = (config) => {

			// #ifdef H5-MOBILE
			config.header['Api-Name'] = 'wap';
			// #endif

			// #ifdef MP-WEIXIN
			config.header['Api-Name'] = 'wxapp';
			// #endif

			// #ifdef H5-WEIXIN
			config.header['Api-Name'] = 'wechat';
			// #endif

			// 接口认证及请求方式
			config.header['Api-Token'] = vm.$u.cache.get('UserToken', '-');
			config.header['Content-Type'] = 'application/x-www-form-urlencoded';

			// 返回接口配置对象
			return config;
		}

		// 响应拦截，判断状态码是否通过
		vm.$u.http.interceptor.response = (ret) => {
			if (ret.code == 401) {
				// 需要重新登录
				vm.$u.login.reload();
				return false;
			} else {
				// 接口验证成功
				return ret;
			}
		}
	}
}
